using UwinEducation.Domain.Entities;
using UwinEducation.Shared.Models;

namespace UwinEducation.Domain.IRepositories
{
    /// <summary>
    /// 学生仓储接口
    /// </summary>
    public interface IStudentRepository : IRepository<Student, Guid>
    {
        /// <summary>
        /// 获取学生分页列表
        /// </summary>
        /// <param name="pageRequest">分页请求参数</param>
        Task<PagedResult<Student>> GetPagedListAsync(StudentPageRequest pageRequest);

        /// <summary>
        /// 获取学生详情
        /// </summary>
        /// <param name="id">学生ID</param>
        Task<Student> GetDetailsByIdAsync(Guid id);

        /// <summary>
        /// 检查学号是否存在
        /// </summary>
        /// <param name="studentNo">学号</param>
        /// <param name="excludeId">排除的学生ID</param>
        Task<bool> ExistsByStudentNoAsync(string studentNo, Guid? excludeId = null);
        /// <summary>
        /// 根据ID列表获取学生列表
        /// </summary>
        /// <param name="guids">学生ID列表</param>
        /// <returns>学生列表</returns>
        Task<List<Student>> GetByIdsAsync(List<Guid> guids);
        /// <summary>
        /// 根据ID列表获取学生列表
        /// </summary>
        /// <param name="request">ID请求参数</param>
        /// <returns>学生列表</returns>
        Task<List<Student>> GetListByIdsAsync(List<IdRequest> request);
        /// <summary>
        /// 获取学生编号最大值
        /// </summary>
        Task<int> GetMaxStudentNoAsync();
    }
}